我的第一個 EXCEL VBA 程式: 撈產線資料分析變壓器出力概念
工廠內的產線有不少變壓器來控制加熱器, 雖然有 DCS 系統可以使用溫度感應器控制出力, 但仍不容易判斷加熱器跟變壓器是否不穩定, 除非整個壞掉, 但緊急處理需要備料, 整線等, 造成產線中止的時間也是公司損耗.
而加熱器或變壓器故障前, 其實是有一段時間的不穩定, 公司用的 DCS 系統也有提供 OPC 介面可以撈取資料, 所以這次就用撈取到的資料, 再透過 EXCEL VBA 進行分析.
主要架構不難....
產線加熱器 - 變壓器 - DCS - 收資料的電腦 - 個人電腦
DCS 負責控制與收集資料, 本身也有紀錄跟趨勢圖(Trend)功能, 不過不直接對外, 而趨勢圖要逐一去看有沒有不穩太麻煩, 之前也沒有寫程式算平均數.
收資料的電腦比較單純, 透過 DCS 的 OPC 介面, 由 VB 呼叫讀取特定資料, 再每日存成 CSV 格式的檔案.
因為許多同事習慣用 EXCEL , 所以....我的第一個 VBA 程式產生了.
概念也不難, 先查詢收資料的電腦有哪些資料檔, 以及對應的讀取權限, 因為有三條產線, 每條產線有六段, 每段有數個加熱器, 所以我用三個 工作表 來對應 產線 , 6 * 8 列(row)來對應不同段, 第一列是 DCS 內的加熱器代號, 第二列是 單位 , 第三列是 註解 , 第四列是 平均 , 第五列是 標準差 , 第六列是 變異係數(CV) , 第七列與加熱器無關, 是該段的資料檔日期, 第八列空著方便與其他段區隔.
這邊的排列主要是與 CSV 資料檔相對應, 而且只保留有使用加熱器的資料.
VBA 內的架構, 則是包括幾項:
基本架構就是這樣, 實際撰寫時則遇到一些判斷上需要很注意的地方:
這樣就完成個人第一個 VBA 程式了.... XD
常遇到問題的地方下面兩個方式給你參考一下
1.可以用Scripting.FileSystemObject的FileExists檢查
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.FileExists("c:\testfile.txt")
檢查a的結果就可以
2.如果你會用Microsoft Query的話,我個人建議用這個建立資料匯入,之後可以用vba去控制要撈檔案的位置跟控制要更新的地方,圖表也可以直接連動資料範圍內。
或是另一個做法 csv檔的檔名固定,寫一個把舊檔案備份到其他地方或是刪掉的script或是cmd都可以,然後Excel設定開啟檔案時自動更新,哪資料跟圖表就會自動更新
第一項我明天試試.
第二項因為資料主機的檔案還有很多其他部門要用, 所以原則上不會去動; 雖然有建議開發部改用資料庫主機存放, 不過....(程式也是避免半夜被on call才想寫的 :p )